package a_doubleWrite;

/**
 * todo
 *
 * @author luolidong
 * @version 1.0
 * @create 2021-08-02 16:01
 */
public class L260 {
    public int[] singleNumber(int[] nums) {
        if(nums.length==2) return nums;
        //两数字异或的值
        int a=0;
        for(int n:nums){
            a^=n;
        }
        //找到两数字不同的位，也就是第一个为1的位
        int b=1;
        while (a!=1){
            a&=b;
            b<<=1;
        }
        int c=0,d=0;
        for(int n:nums){
            if((n&b)==1){
                c^=n;
            }else {
                d^=n;
            }
        }
        return new int[]{c,d};
    }
    public int nthUglyNumber(int n) {
        int[] nums=new int[]{2,3,5};
        int a=1;
        while(true){
            for(int i:nums){
                while(a%i==0){
                    a/=i;
                }
            }
            if(a==1) n--;
            if(n==0) return a;
            a++;
        }
    }
}
